import router from '@/router'
import store from '@/store'
router.beforeEach(async(to, from, next) => {
  const token = store.getters.token
  // 方式一
  // 1、有token有登录的
  if (token) {
    // console.log(1)
    // to的要进入的路由对象
    // 如果已经有token了，要进入的还是登录页，那么就直接跳到首页
    if (to.path === '/login') {
      next('/')
    } else {
      // 目标：进入所有后台页面前，先准备好用户资料。
      // 请求发送时机，
      if (!store.state.user.userInfo.userId) {
        await store.dispatch('user/getUserInfo')
        const menu = store.state.user.userInfo.roles.menus
        console.log(menu, 20)
        const routes = await store.dispatch('permission/filterRoutes', menu)
        console.log(22, routes)
        // 这个是路由特有的方法，把他添加到路由上
        router.addRoutes([
          ...routes,
          // 404 page must be placed at the end !!!
          // 路由匹配动作，从路由列表中找到当前url对应的组件
          // 暂时没有动态路由，连404都没有了，所以一片空白
          { path: '*', redirect: '/404', hidden: true }
        ])
        next(to.path)
      } else {
        // 否则继续放行
        next()
      }
    }
  } else {
    // 2、没有token，没有登录的。
    // 白名单，就可以跳，否则就回到login
    const whiteList = ['/login', '/404', '/test']
    // 如果白名单有包含跳转的路径，就放行
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      // 否则就跳到登录页
      next('/login')
    }
  }

  // 方式二
  // const token = store.getters.token
  // const whiteList = ['/login', '/404', '/test']
  // // 1、有登录token，跳转到登录页
  // if (token && to.path === '/login') {
  //   next('/')
  // }
  // // 1、有登录token，跳转到其他页
  // if (token && to.path !== '/login') {
  //   next()
  // }

  // // 2、没有登录token，白名单，就继续执行
  // if (!token && whiteList.indexOf(to.path) !== -1) {
  //   next()
  // }
  // // 2、没有登录token，黑名单，就跳转登录
  // if (!token && whiteList.indexOf(to.path) === -1) {
  //   next('/login')
  // }
})
